package com.sy.utils;

import org.csource.common.MyException;
import org.csource.common.NameValuePair;
import org.csource.fastdfs.*;
import org.springframework.core.io.ClassPathResource;

import java.io.IOException;

public class FastDFSClient {

	private static TrackerClient trackerClient = null;
	private static TrackerServer trackerServer = null;
	private static StorageServer storageServer = null;
	private static StorageClient1 storageClient = null;
	
	static {
		try {
			// 1、加载配置文件，配置文件中的内容就是 tracker 服务的地址。
			String filePath = new ClassPathResource("fdfs_client.conf").getFile().getAbsolutePath();
			ClientGlobal.init(filePath);
			// 2、创建一个 TrackerClient 对象。直接 new 一个。
			trackerClient = new TrackerClient();
			// 3、使用 TrackerClient 对象创建连接，获得一个 TrackerServer 对象。
			trackerServer = trackerClient.getConnection();
			// 4、创建一个 StorageServer 的引用，值为 null
			storageServer = null;
			// 5、创建一个 StorageClient 对象，需要两个参数 TrackerServer 对象、StorageServer 的引用
			storageClient = new StorageClient1(trackerServer, storageServer);
		} catch (IOException e) {
			throw new RuntimeException(e);
		} catch (MyException e) {
			throw new RuntimeException(e);
		}
	}
	
	/**
	 * 上传文件方法
	 * <p>Title: uploadFile</p>
	 * <p>Description: </p>
	 * @param fileName 文件全路径
	 * @param extName 文件扩展名，不包含（.）
	 * @param metas 文件扩展信息
	 * @return
	 * @throws Exception
	 */
	public static String uploadFile(String fileName, String extName, NameValuePair[] metas) throws Exception {
		// 6、使用 StorageClient 对象上传图片。
		//扩展名不带“.”
		//返回文件名
		String result = storageClient.upload_file1(fileName, extName, metas);
		return result;
	}
	
	public static String uploadFile(String fileName) throws Exception {
		return uploadFile(fileName, null, null);
	}
	
	public static String uploadFile(String fileName, String extName) throws Exception {
		return uploadFile(fileName, extName, null);
	}
	
	/**
	 * 上传文件方法
	 * <p>Title: uploadFile</p>
	 * <p>Description: </p>
	 * @param fileContent 文件的内容，字节数组
	 * @param extName 文件扩展名
	 * @param metas 文件扩展信息
	 * @return
	 * @throws Exception
	 */
	public static String uploadFile(byte[] fileContent, String extName, NameValuePair[] metas) throws Exception {
		
		String result = storageClient.upload_file1(fileContent, extName, metas);
		return result;
	}
	
	public static String uploadFile(byte[] fileContent) throws Exception {
		return uploadFile(fileContent, null, null);
	}
	
	public static String uploadFile(byte[] fileContent, String extName) throws Exception {
		return uploadFile(fileContent, extName, null);
	}


	//删除
	public static int deleteFile(String fileName) throws Exception {
		//fileName --文件路径，例如：group1/M00/00/00/wKgRsVjtwpSAXGwkAAAweEAzRjw471.jpg
		return storageClient.delete_file1(fileName);
	}

	//查询文件信息
	public static FileInfo getFile(String fileName) {
		try {
			return storageClient.get_file_info1(fileName);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
}

